// 包名请保持与你项目一致（与 AuthRepository 的 import 一致）
package no.nordicsemi.android.nrfmesh.auth.data.db;

import android.content.Context;

import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * AuthDatabase（登录信息专用库，首发版）
 *
 * - 新库首发：version=1（不注册任何 Migration）
 * - 串行 I/O 执行器，避免并发写锁冲突
 * - 暴露 accountDao() / userProfileDao() / doctorProfileDao()
 * - 兼容提供 get(Context) 别名，满足你现在的 AuthRepository 用法
 */
@Database(
        entities = {
                Account.class,
                UserProfile.class,
                DoctorProfile.class
        },
        version = AuthDatabase.DATABASE_VERSION,
        exportSchema = false // 关闭导出以消除注解处理器报错
)
public abstract class AuthDatabase extends RoomDatabase {

    /** 新库首发从 1 起步 */
    public static final int DATABASE_VERSION = 1;
    /** DB 文件名（与 AppDatabase 区分开） */
    private static final String DB_NAME = "auth_database";

    /** 单线程 I/O 执行器：Room 查询与事务统一串行化 */
    private static final ExecutorService DB_EXECUTOR = Executors.newSingleThreadExecutor();
    public static ExecutorService io() { return DB_EXECUTOR; }

    // === DAO 抽象方法（与仓库调用保持一致） ===
    public abstract AccountDao accountDao();
    public abstract UserProfileDao userProfileDao();
    public abstract DoctorProfileDao doctorProfileDao();

    // === 单例 ===
    private static volatile AuthDatabase INSTANCE;

    /** 标准入口 */
    public static AuthDatabase getInstance(Context ctx) {
        if (INSTANCE == null) {
            synchronized (AuthDatabase.class) {
                if (INSTANCE == null) {
                    RoomDatabase.Builder<AuthDatabase> b =
                            Room.databaseBuilder(
                                            ctx.getApplicationContext(),
                                            AuthDatabase.class,
                                            DB_NAME
                                    )
                                    // 正式发布不允许主线程 I/O
                                    .setQueryExecutor(DB_EXECUTOR)
                                    .setTransactionExecutor(DB_EXECUTOR);
                    INSTANCE = b.build();
                }
            }
        }
        return INSTANCE;
    }

    /** 与你现有代码兼容的别名：AuthDatabase.get(context) */
    public static AuthDatabase get(Context ctx) {
        return getInstance(ctx);
    }
}
